package com.wang.springbootinit.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wang.springbootinit.model.dto.StudentBatchAddRequest;
import com.wang.springbootinit.model.dto.StudentRoleQueryRequest;
import com.wang.springbootinit.model.dto.StudentUpdateRequest;
import com.wang.springbootinit.model.dto.admin.AdminStudentQueryRequest;
import com.wang.springbootinit.model.entity.Student;
import com.wang.springbootinit.model.vo.StudentVO;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

public interface StudentService extends IService<Student> {
    /**
     * 分页获取学生列表
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @param queryRequest 查询条件
     * @return 学生信息分页数据
     */
    Page<StudentVO> listStudents(int pageNum, int pageSize, StudentRoleQueryRequest queryRequest);

    /**
     * 管理端获取学生列表
     * @param queryRequest
     * @return
     */
    Page<StudentVO> listStudents(AdminStudentQueryRequest queryRequest);

    /**
     * 获取学生详细信息VO
     * @param id 学生ID
     * @return 学生详细信息
     */
    StudentVO getStudentVOById(Long id);

    /**
     * 根据学号获取=学生信息
     * @param studentNumber
     * @return
     */
    Student getStudentByNumber(String studentNumber);

    Student getStudentByHttpRequest(HttpServletRequest request);

    /**
     * 更新学生信息
     * @param updateRequest 更新请求
     * @return 是否更新成功
     */
    Boolean updateStudent(StudentUpdateRequest updateRequest);

    /**
     * 删除学生
     * @param id 学生ID
     * @return 是否删除成功
     */
    Boolean deleteStudent(Long id);

    /**
     * 批量添加学生
     * @param addRequest 添加请求
     * @return 是否添加成功
     */
    Boolean addStudentsByClass(StudentBatchAddRequest addRequest);

    /**
     * 学生端，获取当前登录学生
     * @param request
     * @return
     */
    StudentVO getCurrentStudent(HttpServletRequest request);

    /**
     * 教师端-获取所有学生列表
     * @return
     */
    List<StudentVO> listAllStudents();
}